Kubernetes
是一個集群管理系統,它擁有可移植、擴展和高可用等特性。它用於管理容器(container),然而容器的出現改變了佈署方式。容器類似於 VM
與主機共享內核(kernel),容器有自己的檔案系統(filesystem)、CPU
、記憶體(memory)、行程空間(process space)等。因為它們與基礎架構分離,因此可以跨雲(公、私有或混合雲中)和作業系統進行移植。然而容器佈署的數量越多管理難度明顯的會提升,使用者必須對容器進行分組,並對其分配網路、監控或安全等服務。藉由 Kubernetes
提供的編排和管理功能,以便完成大規模佈署,且 Kubernetes
提供了資源調度、容器擴展等管理功能,這些的作用讓 Kubernetes
可以管理容器應用程式的生命週期。
Kubernetes 匯集多個物理機、虛擬機將其變成一個集群。如下圖
POD
Kubernetes
中嘴小運算單元POD
中的容器共享 namespace
和儲存資源,但彼此又在 mount
、user
、PID
等名稱空間保持隔離在 kubernetes 中有很多的組件會來支撐整個集群的運作邏輯,像是編排、暴露、恢復等,之後文章會慢慢的提到。
負責輸出 RESTful
的 Kubernetes API,負責接收和驗證相關的請求,其狀態資源會被存入 etcd
中。
該 etcd
會確保生產環境的可用性。它會提供監聽的機制,用於推送和監聽變更。只要有發生變化便會與 API Server
溝通,並做出適當的動作向客戶端輸出。
控制器完成的功能包括生命週期和 API
一些邏輯。
namespace
創建Event
垃圾回收POD
終止相關垃圾回收ReplicaSet
DaemonSet
當 API Server
確認 POD
對象的建立請求後,需要由 Scheduler
根據集群內各節點的可用資源狀態,以及要運行的容器資源需求做出調度決策。總而言之就是幫助 API Server
尋找合適節點部署。
使用以下流程進行容器佈署
CPU
Memory
GPU
scoring
選擇最高分數,並回傳 API Server
由它處裡運行於工作節點之上的一個進程,從 API Server
接收關於 POD
對象的配置訊息並確保處於期望的狀態。同時也會向 master
報告節點資源狀態。kubelet
依賴於 CRI
來創建容器。
工作節點的進程,按需為 Service
資源對象生成 iptables
或 ipvs
規則,進而擷取存取當前 Service
的 ClusterIP
的流量並將其轉發至正確的 POD
上。總而言之網路部分由它負責。
Docker
,而每個容器的設計都不一樣,因此提出一個介面讓大家可以實作自己的運行方式container